第7章 大規模コンテンツ配信サーバの構築
大量のコンテンツを配信するには
問題点と対策のポイント
CPU
ディスクI/O
ファイルのリクエストで発生する負荷は主に読み込み負荷で、ファイルのアップロードや移動・削除で発生する負荷は主に書き込み負荷になる。
一般的なOSはページキャッシュを持っているため、キャッシュに載っている間はディスクI/Oが発生してもボトルネックにならないことがある。
実際にI/Oが遅延の原因になっているかを知るには、I/O量ではなくCPUのI/O待ちを確認する。
ネットワーク
負荷を測る指針としては帯域幅、ネットワーク遅延、TCPセッションのコネクション数
帯域幅
ハードウェア二よっって上限が決まっており、一般的なNICでしようできる帯域は1Gbpsで実際の実行帯域は980Mbps程度。
ネットワーク遅延
クライアントとサーバ間の物理的距離や接続品質により変化する。
大規模サービスではCDN(Content Delivery Network)をしようする。
TCPセッションのコネクション数
TCPでは最大65536個のポートを使用できるが、TCPでは1つのコネクションを接続すると送信元ポートとして1つのローカルポートを占有する。
プロキシサーバではアップストリームとのコネクション数が増えるとローカルポートが足りなくなるため、枯渇を防ぐためのカーネルパラメータなどの設定が必要。
負荷削減のアプローチ
1台で処理できる量を増やす(スケールアップ、チューニング)
ハードウェアを高速なものに置き換える。
アプリケーションのループ回数やRDBのインデックス最適化など。
複数台に処理を分散して1台あたりの負荷を下げる(スケールアウト)
キャッシュ
キャッシュが最も有効となるのは全てのページで共通して使われるJavaScriptやCSSなどのアセットファイル。
ユーザー投稿型コンテンツでは全体の容量が大きいため、参照頻度が低い大量のリクエストとによって参照頻度が高いコンテンツがキャッシュから追い出されてしまうため、大容量のキャッシュを持つキャッシュクラスタを構築する必要がある。
ロードバランサー
オリジンサーバの構築
役割は静的ファイルの配信。
キャッシュ制御のためのレスポンスヘッダ指定
コンテンツファイルの変換
配信するファイルのアップロード